package com.service.user;

import com.entity.Order;

import java.util.List;
import java.util.Map;

/**
 *
 */
public interface OrderService {

    /**
     * 提交订单
     *
     * @param userId   用户编号
     * @param goodId   商品编号
     * @param goodNum  商品数目
     * @param tradeWay 交易方式，'线上'或'线下'
     * @param grId     收货信息编号 若为线下交易，则收货信息编号为""或“undefined”即可
     * @param remark   备注
     * @return 生成订单返回订单号
     */
    String addAOrder(
            String userId, String goodId, int goodNum, String tradeWay, String grId, String remark);

    List<Order> getOrdersByIds(List<String> orderIds);

    int getBuyerOrderCount(String userId, int orderStatus);

    /**
     * 获取订单
     *
     * @param userId      用户编号
     * @param orderStatus 订单状态
     * @param pageSize    页大小
     * @param pageIndex   页索引
     * @return 订单列表
     */
    List<Order> getBuyerOrders(String userId, int orderStatus, int pageSize, int pageIndex);

    /**
     * 获取生成订单所需的信息
     *
     * @param goodId 商品编号
     * @return 生成订单所需的信息，包括商品基本信息和卖家
     */
    Map<String, Object> getCreateOrderInfo(String goodId);

    /**
     * 获取生成订单所需的信息
     *
     * @param goodIds 商品编号
     * @return 生成订单所需的信息，包括商品基本信息和卖家
     */
    List<Map<String, Object>> getCreateOrdersInfo(String[] goodIds);

    /**
     * 获取所给订单订单列表中当前时间-生成时间最长的分钟数。
     *
     * @param orderIds 订单编号列表
     * @return 给订单订单列表中当前时间-生成时间最长的分钟数
     */
    int getWaitPayMaxPastMinutes(String[] orderIds);

    /**
     * 删除订单 当且仅当订单状态为waitPay时才能被取消
     *
     * @param userId  用户编号
     * @param orderId 订单编号
     * @return 取消成功返回1，失败返回0
     */
    int deleteOrder(String userId, String orderId);

    /**
     * 用书币支付,这里需要修改调用订单的服务（订单支付成功），更新钱包的数目，添加钱包的流水记录。
     *
     * @param userId   用户编号
     * @param orderIds 订单编号列表
     * @param totalNum 总数目
     * @return 成功返回1，失败返回0
     */
    int payWithCoin(String userId, String[] orderIds, float totalNum);

    int orderPaySuccess(String[] orderIds);

    /**
     * 确认收货
     *
     * @param orderId 订单编号
     * @return
     */
    int confirmGood(String orderId);

    int urgedDelivery(String orderId);

    List<Map<String, Object>> getAllFeedBack(int pageSize, int pageIndex);

    int getAllFeedBackCount();
}
